﻿using QLBH.DTO;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace QLBH.DATA
{
    public class NhaCungCapData
    {
        private static QLBHEntities db = new QLBHEntities();
        public string Error { set; get; }

        public List<NHA_CUNG_CAP> TimNhaCungCapTheoTen(string ten_nha_cung_cap, int tong_so_dong)
        {

            List<NHA_CUNG_CAP> list = new List<NHA_CUNG_CAP>();
            if (ten_nha_cung_cap == "")
            {
                list = db.NHA_CUNG_CAP.Where(p => p.DA_XOA == false).ToList().Skip(tong_so_dong).Take(200).ToList().Select(p=> new NHA_CUNG_CAP()
                {
                  DA_XOA=  p.DA_XOA,
                  DIA_CHI = p.DIA_CHI,
                  DIEN_THOAI = p.DIEN_THOAI,
                  EMAIL =p.EMAIL ,
                  FAX = p.FAX,
                  LAN_SUA_CUOI =p.LAN_SUA_CUOI,
                  MA_NHA_CUNG_CAP=p.MA_NHA_CUNG_CAP,
                  MO_TA = p.MO_TA,
                  NGUOI_SUA = p.NGUOI_SUA,
                  TAI_KHOAN_NGAN_HANG = p.TAI_KHOAN_NGAN_HANG,
                  TEN_NHA_CUNG_CAP =p.TEN_NHA_CUNG_CAP,
                  WEBSITE = p.WEBSITE
                }).ToList();
            }
            else
                list = db.NHA_CUNG_CAP.Where(p => p.DA_XOA == false && p.TEN_NHA_CUNG_CAP.Contains(ten_nha_cung_cap)).ToList().Skip(tong_so_dong).Take(200).ToList().Select(p => new NHA_CUNG_CAP()
                {
                    DA_XOA = p.DA_XOA,
                    DIA_CHI = p.DIA_CHI,
                    DIEN_THOAI = p.DIEN_THOAI,
                    EMAIL = p.EMAIL,
                    FAX = p.FAX,
                    LAN_SUA_CUOI = p.LAN_SUA_CUOI,
                    MA_NHA_CUNG_CAP = p.MA_NHA_CUNG_CAP,
                    MO_TA = p.MO_TA,
                    NGUOI_SUA = p.NGUOI_SUA,
                    TAI_KHOAN_NGAN_HANG = p.TAI_KHOAN_NGAN_HANG,
                    TEN_NHA_CUNG_CAP = p.TEN_NHA_CUNG_CAP,
                    WEBSITE = p.WEBSITE
                }).ToList(); ;
            return list;
        }


        private string TaoMa()
        {
            string result = "";
            if (db.NHA_CUNG_CAP.ToList().Count <= 0)
            {
                result = "0001";
            }
            else
            {
                int maxId = 0;

                foreach (var item in db.NHA_CUNG_CAP.ToList())
                {
                    if (maxId < int.Parse(item.MA_NHA_CUNG_CAP.Substring(3)))
                    {
                        maxId = int.Parse(item.MA_NHA_CUNG_CAP.Substring(3));
                    }
                }
                switch (maxId.ToString().Length)
                {
                    case 1:
                        result = "000" + (maxId + 1);
                        break;


                    case 2:
                        result = "00" + (maxId + 1);
                        break;


                    case 3:
                        result = "0" + (maxId + 1);
                        break;


                    case 4:
                        result = "" + (maxId + 1);
                        break;
                    default:
                        break;
                }
            }
            return "NCC" + result;
        }

        public bool ThemMoi(NHACUNGCAPPARAM NHACUNGCAP)
        {
            try
            {
                NHA_CUNG_CAP pb = new NHA_CUNG_CAP();
                pb.MA_NHA_CUNG_CAP = NHACUNGCAP.MA_NHA_CUNG_CAP;
                pb.TEN_NHA_CUNG_CAP = NHACUNGCAP.TEN_NHA_CUNG_CAP;
                pb.DIA_CHI = NHACUNGCAP.DIA_CHI;
                pb.DIEN_THOAI = NHACUNGCAP.DIEN_THOAI;
                pb.EMAIL = NHACUNGCAP.EMAIL;
                pb.WEBSITE = NHACUNGCAP.WEBSITE;
                pb.TAI_KHOAN_NGAN_HANG = NHACUNGCAP.TAI_KHOAN_NGAN_HANG;
                pb.FAX = NHACUNGCAP.FAX;
                pb.MO_TA = NHACUNGCAP.MO_TA;
                pb.DA_XOA = false;
                pb.LAN_SUA_CUOI = DateTime.Now;
                pb.NGUOI_SUA = NHACUNGCAP.NGUOI_SUA;

                if (pb.MA_NHA_CUNG_CAP.Trim().Length <= 0)
                {
                    pb.MA_NHA_CUNG_CAP = TaoMa();
                }
                else if (db.NHA_CUNG_CAP.Any(p => p.MA_NHA_CUNG_CAP == pb.MA_NHA_CUNG_CAP))
                {
                    Error = "Mã nhà cung cấp đã tồn tại";
                    return false;
                }

                db.NHA_CUNG_CAP.Add(pb);
                db.SaveChanges();
                return true;
            }
            catch (Exception ex)
            {
                Error = ex.Message;
                return false;
            }
        }

        public bool CapNhat(NHACUNGCAPPARAM NHACUNGCAP)
        {
            try
            {
               
                NHA_CUNG_CAP n = db.NHA_CUNG_CAP.Where(p => p.MA_NHA_CUNG_CAP == NHACUNGCAP.MA_NHA_CUNG_CAP).FirstOrDefault();
                if (n == null)
                {
                    Error = "Nhà cung cấp không tồn tại";
                    return false;
                }

                if (n.LAN_SUA_CUOI.ToString("ddMMyyyyhhmmss") != NHACUNGCAP.LAN_SUA_CUOI.ToString("ddMMyyyyhhmmss"))
                {
                    Error = "Nhà cung cấp đã được sửa bởi " + n.NGUOI_SUA + " Vào lúc : " + n.LAN_SUA_CUOI.ToString("dd/MM/yyyy hh:mm:ss");
                    return false;
                }

                n.TEN_NHA_CUNG_CAP = NHACUNGCAP.TEN_NHA_CUNG_CAP;
                n.DIA_CHI = NHACUNGCAP.DIA_CHI;
                n.DIEN_THOAI = NHACUNGCAP.DIEN_THOAI;
                n.EMAIL = NHACUNGCAP.EMAIL;
                n.WEBSITE = NHACUNGCAP.WEBSITE;
                n.TAI_KHOAN_NGAN_HANG = NHACUNGCAP.TAI_KHOAN_NGAN_HANG;
                n.FAX = NHACUNGCAP.FAX;
                n.MO_TA = NHACUNGCAP.MO_TA;
                n.DA_XOA = false;
                n.LAN_SUA_CUOI = DateTime.Now;
                n.NGUOI_SUA = NHACUNGCAP.NGUOI_SUA;

                db.SaveChanges();
                return true;
            }
            catch (Exception ex)
            {
                Error = ex.Message + "--" + ex.InnerException.Message;
                return false;
            }
        }

        public bool Xoa(string[] MA_NHA_CUNG_CAP)
        {
            try
            {
                for (int i = 0; i < MA_NHA_CUNG_CAP.Length; i++)
                {
                    string m = MA_NHA_CUNG_CAP[i];
                    NHA_CUNG_CAP n = db.NHA_CUNG_CAP.Where(p => p.MA_NHA_CUNG_CAP == m).FirstOrDefault();
                    if (n == null)
                    {
                        Error = "Nhà cung cấp không tồn tại";
                        return false;
                    }

                    n.DA_XOA = true;
                    db.SaveChanges();
                }

                return true;
            }
            catch (Exception ex)
            {
                Error = ex.Message + "--" + ex.InnerException.Message;
                return false;
            }
        }

    }
}